<?php

namespace IDock\Common\BaseInterface;

use IDock\Http\Request;
use IDock\Http\Response;

/**
 * 基础请求接口类
 */
interface BuilderInterface
{
    /**
     * @return array
     */
    public function getConfig() :array;

    /**
     * 执行请求--构建请求参数
     * @param Request $request
     * @return Response
     * @author xis
     */
    public function execute(Request $request): Response;


    /**
     * 请求参数生成
     * @param Request $request
     * @return array
     */
    public function generate(Request $request): array;

    /**
     * 签名方法
     * @param Request $request
     * @return mixed
     */
    public function sign(Request $request): Request;

    /**
     * 加密方法
     * @param Request $request
     * @return mixed
     */
    public function encrypt(Request $request);

    /**
     *
     * @param Request $request
     * @param $errorMessage
     * @return Response
     */
    public function exceptionResponse(Request $request, $errorMessage): Response;


    /**
     * 执行请求--构建执行参数
     * @param Request $request
     * @return Response
     */
    public function request(Request $request): Response;

}
